package com.charles.seckillcommon.security.utils;

import com.charles.seckillapi.model.UserLogin;
import com.charles.seckillcommon.core.constants.RoleConstants;
import com.charles.seckillcommon.core.constants.TokenConstants;
import com.charles.seckillcommon.core.context.ThreadContext;
import com.charles.seckillcommon.core.utils.ServletUtils;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * @author Charles-H
 * 
 * 线程工具类
 */
public class ThreadUtil {
    
    /** 获取客户id */
    public static String getUserId() {
        return ThreadContext.getUserId();
    }

    /** 获取客户key */
    public static String getUserKey() {
        return ThreadContext.getUserKey();
    }

    /** 获取客户名称 */
    public static String getUsername() {
        return ThreadContext.getUsername();
    }

    /** 获取客户身份证号码 */
    public static String getUserCard() {
        return ThreadContext.getUserCard();
    }
    
    /** 获取客户信息 */
    public static UserLogin getUserLogin() {
        return ThreadContext.get(RoleConstants.USER_LOGIN, UserLogin.class);    
    }
    
    /** 获取请求token */
    public static String getToken() {
        return getToken(ServletUtils.getRequest());
    }

    /** 通过请求获取token */
    public static String getToken(HttpServletRequest request) {
        // 在请求头中获取token标识
        String token = request.getHeader(TokenConstants.TOKEN_AUTHENTICATION);
        return replaceTokenPrefix(token);
    }

    /** 裁剪token前缀 */
    public static String replaceTokenPrefix(String token) {
        if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.TOKEN_PREFIX)) {
            token = token.replaceFirst(TokenConstants.TOKEN_PREFIX, "");
        }
        return token;
    }
    
}
